﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ahi.Entity;
using Ahi.Controller;
using Ahi.Entity.Enums;
using Ahi.PersonelArama;

namespace Ahi.IsArama
{
    public partial class IsArayanDuzenleForm : Base.DuzenleBaseForm
    {
        IsArayanEntity entity;

        public PersonelArayanEntity CurrentPersonelArayan
        {
            get
            {
                if (bsPersonelArayan.Current is PersonelArayanEntity)
                    return bsPersonelArayan.Current as PersonelArayanEntity;
                return null;
            }
        }

        public IsArayanDuzenleForm()
        {
            InitializeComponent();
        }

        public override void Hazirla()
        {
            cinsiyetLookUpEdit.SetEnumList<Cinsiyet>();
            dernekEtkKatilimiLookUpEdit.SetEnumList<EtkinlikKatilim>();
            repositoryItemLookUpYabanicDilSeviye.SetEnumList<YabanciDilSeviyeleri>();
            repositoryItemLookUpAdresTipi.SetEnumList<AdresTipi>();
            repositoryItemLookUpEmailTipi.SetEnumList<EmailTipi>();
            repositoryItemLookUpTelefonTipi.SetEnumList<TelefonTipi>();
            editMezuniyet.SetEnumList<MezuniyetSeviyeleri>();
            isDeneyimiLookUpEdit.SetEnumList<IsDeneyimi>();
            medeniHalLookUpEdit.SetEnumList<MedeniHaller>();
            askerlikDurumuLookUpEdit.SetEnumList<AskerlikDurumlari>();
            repositoryItemLookUpDil.SetEnumList<YabanciDiller>();
        }

        public override void YeniKayit()
        {
            entity = new IsArayanEntity();
        }

        public override void KayitYukle(Base.IdFormParameter Id)
        {
            entity = MongoAdaptor.Instance.GetDataById<IsArayanEntity>(Id.AsObjectId);
        }

        public override void YuklediktenSonraCalistir()
        {
            bsData.DataSource = entity;

            if (!Id.HasValue)
            {
                entity.Cinsiyet = Cinsiyet.Erkek;
                entity.DernekEtkKatilimi = EtkinlikKatilim.Kismen_Katiliyor;
                entity.Il = "İstanbul";
                entity.IsArayisiVarMi = true;
                entity.Mezuniyet = MezuniyetSeviyeleri.Lisans;

                bsData.ResetBindings(false);
            }
        }

        public override void Kaydet()
        {
            MongoAdaptor.Instance.Save<IsArayanEntity>(entity);
            Close();
        }

        private void buttonPersonelArayanlariBul_Click(object sender, EventArgs e)
        {
            Bul();
        }

        private void Bul()
        {
            var personelArayanlar = MongoAdaptor.Instance.GetData<PersonelArayanEntity>();

            if (entity.Cinsiyet != Cinsiyet.Bilinmiyor)
                personelArayanlar = personelArayanlar.Where(x => x.Cinsiyet == Cinsiyet.Bilinmiyor || x.Cinsiyet == entity.Cinsiyet).ToList();

            if (!string.IsNullOrEmpty(entity.Il))
                personelArayanlar = personelArayanlar.Where(x => string.IsNullOrEmpty(x.Il) || x.Il == entity.Il).ToList();

            if (!string.IsNullOrEmpty(entity.Ilce))
                personelArayanlar = personelArayanlar.Where(x => string.IsNullOrEmpty(x.Ilce) || x.Ilce == entity.Ilce).ToList();

            if (entity.MedeniHal != MedeniHaller.Belirsiz)
                personelArayanlar = personelArayanlar.Where(x => x.MedeniHal == MedeniHaller.Belirsiz || x.MedeniHal == entity.MedeniHal).ToList();

            personelArayanlar = personelArayanlar.Where(x => x.MinimumIsDeneyimi <= entity.IsDeneyimi).ToList();

            if (entity.MaasBeklentisi > 0)
                personelArayanlar = personelArayanlar.Where(x => x.MaasMiktari == 0 || x.MaasMiktari >= entity.MaasBeklentisi).ToList();

            personelArayanlar = personelArayanlar.Where(x => x.MinimumMezuniyet <= entity.Mezuniyet).ToList();

            if (entity.AskerlikDurumu != AskerlikDurumlari.Belirsiz)
                personelArayanlar = personelArayanlar.Where(x => x.AskerlikDurumu <= entity.AskerlikDurumu).ToList();

            if (entity.YabanciDiller.Count > 0)
                personelArayanlar = personelArayanlar.Where(x =>
                    entity.YabanciDiller.Where(y => y.Dil == x.YabanciDil).Count() > 0).ToList();

            bsPersonelArayan.DataSource = personelArayanlar;
        }

        private void gridView1_DoubleClick(object sender, EventArgs e)
        {
            if (CurrentPersonelArayan == null) return;
            PersonelArayanDuzenleForm frm = new PersonelArayanDuzenleForm();
            frm.Id = CurrentPersonelArayan.Id;
            frm.ShowDialog();
        }
    }
}
